#include "graph.h"
#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> pii;
const int I=1e9;
void Inspect(int r){
  int n=0;
  vector<vector<pii> > g;
  vector<vector<int> > t;
  vector<int> fa;
  function<int(int,int)> dfs=[&](int lf,int lp){
    int l=LastRoad(),c=Color();
    if(c>=2)return Move(l,c),c;
    int u=n++,s=NumberOfRoads();
    if(~lf)g[lf].emplace_back(u,lp);
    g.emplace_back(vector<pii>());
    t.emplace_back(vector<int>());
    fa.emplace_back(lf);
    for(int i=1;i<=s;i++)
      if(i!=l){
        Move(i,2);
        if(dfs(u,i)==2)t[u].emplace_back(i);
      }
    if(u)Move(l,3);
    return 1;
  };
  dfs(-1,-1);
  vector<int> d(n);
  function<void(int)> dfs2=[&](int u){
    for(auto e:g[u]){
      int i,p; tie(i,p)=e;
      d[i]=d[u]+1,dfs2(i);
    }
  };
  dfs2(0);
  vector<vector<int> > rs(n);
  for(int i=0;i<n;i++)
    rs[i].resize(t[i].size());
  for(int B=1;B<=200;B*=3){
    function<void(int,int)> dfs3=[&](int u,int c){
      if(u&&!(d[u]%B))(++c)%=3;
      int l=LastRoad();
      for(auto e:g[u]){
        int i,p; tie(i,p)=e;
        Move(p,c+1),dfs3(i,c);
      }
      for(int i=0;i<t[u].size();i++){
        Move(t[u][i],c+1);
        int l=LastRoad(),w=Color();
        rs[u][i]+=B*(w-1),Move(l,w);
      }
      if(u)Move(l,1);
    };
    dfs3(0,0);
  }
  for(int u=0;u<n;u++)
    for(int i=0;i<rs[u].size();i++){
      int v=u;
      while(d[v]>rs[u][i])v=fa[v];
      g[u].emplace_back(v,0);
    }
  vector<vector<int> > f(n,vector<int>(n,1e9));
  for(int i=0;i<n;i++){
    f[i][i]=0;
    for(auto e:g[i])f[i][e.first]=f[e.first][i]=1;
  }
  for(int i=0;i<n;i++)
    for(int j=0;j<n;j++)
      for(int k=0;k<n;k++)
        f[j][k]=min(f[j][k],f[j][i]+f[i][k]);
  vector<int> w(r+1);
  for(int i=0;i<n;i++)
    for(int j=i+1;j<n;j++)
      if(f[i][j]<=r)w[f[i][j]]++;
  for(int i=1;i<=r;i++)
    Answer(i,w[i]);
}